package com.huizhonglm.diap.ui.tab;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import com.huizhonglm.diap.R;
import com.huizhonglm.diap.api.model.user.MarketInfo;
import com.huizhonglm.diap.core.utils.LogUtil;
import com.huizhonglm.diap.core.utils.ToastUtil;
import com.huizhonglm.diap.core.utils.UserUtil;
import com.huizhonglm.diap.presenters.tab.TabhostMarketPresenter;
import com.huizhonglm.diap.ui.BaseFragment;
import com.huizhonglm.diap.ui.app.CreditActivity;
import com.huizhonglm.diap.ui.app.CreditActivity.CreditsListener;
import com.huizhonglm.diap.ui.tab.iView.TabhostMarketIView;

/**
 * 描述当前类的作用
 *
 * @author LiXiaoLong
 * @version 1.0
 * @since 2016-03-01 23:27
 */
public class TabhostMarketFragment extends BaseFragment implements View.OnClickListener, TabhostMarketIView {

    private View rootView;
    private WebView mWebView;

    private boolean isVisible = false;
    private boolean isPrepared = false;

    private String strURL="http://www.duiba.com.cn/autoLogin/autologin?sign=0602ab777ac485e277602fbc83e157e3&timestamp=1484225068498&uid=ff8080815443edcd015443f6af450001&credits=1185&appKey=2wajYhtRzj8B9B3uD1uaEaCnf8Xo&";
    private TabhostMarketPresenter mPresenter;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mPresenter = new TabhostMarketPresenter(this);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragment_tabhost_market, container, false);
        }
        mPresenter = new TabhostMarketPresenter(this);
        initWebView(rootView);
        mPresenter.loadData(UserUtil.getUserId());
        isPrepared = true;
        return rootView;
    }

    private void initWebView(View view){
        mWebView = (WebView)view.findViewById(R.id.webview);
        WebSettings ws = mWebView.getSettings();
        // 适应手机屏幕：
        ws.setUseWideViewPort(true);
        ws.setLoadWithOverviewMode(true);
        // 放大设置：
        ws.setDisplayZoomControls(false);
        // 无限放大：
        ws.setSupportZoom(false);
        // 缩放至屏幕的大小
        ws.setLoadWithOverviewMode(true);
        // 支持自动加载图片
        ws.setLoadsImagesAutomatically(true);
        // 实际应用中，一般配置即可满足基本需求
        ws.setJavaScriptEnabled(true);
        ws.setDefaultTextEncodingName("utf-8");
        // 设置 缓存模式
        ws.setCacheMode(WebSettings.LOAD_DEFAULT);
        // 开启 DOM storage API 功能
        ws.setDomStorageEnabled(true);
        /**
         * Webview在安卓5.0之前默认允许其加载混合网络协议内容
         * 在安卓5.0之后，默认不允许加载http与https混合内容，需要设置webview允许其加载混合网络协议内容
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ws.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        // 设置初始缩放大小


        //覆盖系统浏览器打开，使目标在webview中打开
        mWebView.setWebViewClient(new MyWebViewClient());
    }

    private void loadData2WebView(){
      mWebView.loadUrl(strURL);
    }
    @Override
    public void onLoadDataEmpty() {
        ToastUtil.makeTextShort("获取URL地址错误");
    }

    @Override
    public void onLoadDataFailure() {
        ToastUtil.makeTextShort("获取URL地址错误");
    }

    @Override
    public void onLoadDataSuccess(MarketInfo result) {
        if (result!=null){
            strURL=result.getUrl();
            loadData2WebView();
        }
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        LogUtil.print("tabhostme---setUserVisibleHint");
        boolean userVisibleHint = getUserVisibleHint();
        if (userVisibleHint) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
        }
    }

    @Override
    public void onVisible() {
        if (isPrepared && isVisible) {
            mPresenter.loadData(UserUtil.getUserId());
        }
    }

    @Override
    public void onClick(View v) {

    }

    /**
     * WebView 页面跳转，错误处理重写
     * <p/>
     * 创建时间: 2014年12月30日 下午6:21:31 <br/>
     *
     * @author xnjiang
     * @version WebViewActivity
     * @since v0.0.10
     */
    public class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("dbnewopen")){
                openNew(url);
            }else {
                view.loadUrl(url);
            }
            return true;//ture为在webview中打开
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            // 屏蔽掉错误信息.
            // handleLoadError(view);
        }

        /**
         * 核心解决加载https页面的时候空白页面的问题
         */
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            //handler.cancel(); // Android默认的处理方式，WebView变成空白页
            handler.proceed(); // 接受所有网站的证书，系统就会忽略证书的错误继续Load页面内容，不会显示空白页面
            // handleMessage(Message msg); // 进行其他处理
        }
    }

    private void openNew(String url){
        Intent intent = new Intent();
        intent.setClass(getActivity(), CreditActivity.class);
        intent.putExtra("navColor", "#fff54545");    //配置导航条的背景颜色，请用#ffffff长格式。
        intent.putExtra("titleColor", "#ffffff");    //配置导航条标题的颜色，请用#ffffff长格式。
        intent.putExtra("url", url);    //配置自动登陆地址，每次需服务端动态生成。
        startActivity(intent);

        CreditActivity.creditsListener = new CreditsListener() {
            /**
             * 当点击分享按钮被点击
             * @param shareUrl 分享的地址
             * @param shareThumbnail 分享的缩略图
             * @param shareTitle 分享的标题
             * @param shareSubtitle 分享的副标题
             */
            public void onShareClick(WebView webView, String shareUrl,String shareThumbnail, String shareTitle,  String shareSubtitle) {
                //当分享按钮被点击时，会调用此处代码。在这里处理分享的业务逻辑。
                new AlertDialog.Builder(webView.getContext())
                        .setTitle("分享信息")
                        .setItems(new String[] {"标题："+shareTitle,"副标题："+shareSubtitle,"缩略图地址："+shareThumbnail,"链接："+shareUrl}, null)
                        .setNegativeButton("确定", null)
                        .show();
            }

            /**
             * 当点击“请先登录”按钮唤起登录时，会调用此处代码。
             * 用户登录后，需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
             * @param webView 用于登录成功后返回到当前的webview刷新登录状态。
             * @param currentUrl 当前页面的url
             */
            public void onLoginClick(WebView webView, String currentUrl) {
                //当未登录的用户点击去登录时，会调用此处代码。
                //用户登录后，需要将CreditsActivity.IS_WAKEUP_LOGIN变量设置为true。
                //为了用户登录后能回到未登录前的页面（currentUrl）。
                //当用户登录成功后，需要重新请求一次服务端，带上currentUrl。
                //用该方法中的webview变量加载请求链接。
                //服务端收到请求后在生成免登录url时，将currentUrl放入redirect参数，通知客户端302跳转到新生成的免登录URL。
                new AlertDialog.Builder(webView.getContext())
                        .setTitle("跳转登录")
                        .setMessage("跳转到登录页面？")
                        .setPositiveButton("是", null)
                        .setNegativeButton("否", null)
                        .show();
            }

            /**
             * 当点击“复制”按钮时，触发该方法，回调获取到券码code
             * @param webView webview对象。
             * @param code 复制的券码
             */
            public void onCopyCode(WebView webView, String code) {
                //当未登录的用户点击去登录时，会调用此处代码。
                new AlertDialog.Builder(webView.getContext())
                        .setTitle("复制券码")
                        .setMessage("已复制，券码为："+code)
                        .setPositiveButton("是", null)
                        .setNegativeButton("否", null)
                        .show();
            }

            /**
             * 积分商城返回首页刷新积分时，触发该方法。
             */
            public void onLocalRefresh(WebView mWebView, String credits) {
                //String credits为积分商城返回的最新积分，不保证准确。
                //触发更新本地积分，这里建议用ajax向自己服务器请求积分值，比较准确。
                Toast.makeText(getActivity().getApplicationContext(), "触发本地刷新积分："+credits,Toast.LENGTH_SHORT).show();
            }
        };
    }
}
